<?php namespace system\model;

use houdunwang\model\Model;
class Category extends Model{
	//数据表
	protected $table = "category";

	//允许填充字段
	protected $allowFill = ['*'];

	//禁止填充字段
	protected $denyFill = [ ];

	//自动验证
	protected $validate=[
		//['字段名','验证方法','提示信息',验证条件,验证时间]
		['cate_name','required','栏目名称不能为空',self::MUST_VALIDATE,self::MODEL_BOTH],
		['cate_description','required','栏目描述不能为空',self::MUST_VALIDATE,self::MODEL_BOTH],
		['cate_sort','required','栏目排序不能为空',self::MUST_VALIDATE,self::MODEL_BOTH],
		['cate_linkurl','required','外部链接url不能为空',self::MUST_VALIDATE,self::MODEL_BOTH],
//		['cate_pid','required','栏目父级id不能为空',self::MUST_VALIDATE,self::MODEL_BOTH],
	];

	//自动完成
	protected $auto=[
		//['字段名','处理方法','方法类型',验证条件,验证时机]
		['cate_sort','intval','function',self::MUST_AUTO,self::MODEL_BOTH ],
	];

	//自动过滤
    protected $filter=[
        //[表单字段名,过滤条件,处理时间]
    ];

	//时间操作,需要表中存在created_at,updated_at字段
	protected $timestamps=false;

	/*
	 * 获取栏目数据
	 */
	public function getAllCate()
	{
		return Arr::tree($this->get()->toArray(),'cate_name',$fieldPri = 'cate_id', $fieldPid = 'cate_pid');
	}

	/*
	 * 递归找自己
	 * $data 栏目所有数据
	 * $cate_id 栏目id
	 */
	public function getSon($data,$cate_id)
	{
		//防止$temp每次都从空开始，所以使用静态变量
		static $temp = [];
		foreach($data as $k=>$v)
		{
			if($v['cate_pid'] == $cate_id)
			{
				//子类元素
				$temp[] = $v['cate_id'];//把找到的这条数据对应的cid存起来
				$this->getSon($data,$v['cate_id']);//接下来应该继续去找$v['cate_id'],它的子集数据
			}
		}
		return $temp;
	}

	/*
	 * 获取处了自己和自己子集之外的数据
	 */
	public function  getSonCateData($cate_id)
	{
		//递归找子集
		$cids = $this->getSon($this->get()->toArray(),$cate_id);
		//添加上自己
		$cids[] = $cate_id;
		//将自己和子集数据踢出去
		$res = $this->whereNotIn('cate_id',$cids)->get()->toArray();
		return Arr::tree($res,'cate_name','cate_id','cate_pid');

	}

	/*
	 * 删除
	 */
	public function del($cate_id)
	{
		$model = Category::find($cate_id);
		//如果有子集不允许删除
		if($this->where('cate_pid',$cate_id)->get())
		{
			$this->setError(['请删除子栏目']);
			return false;
		}
		//返回删除当前的数据对象
		return $model->destory();
	}
}